// 字符串的属性
let str = "abc";
console.log(str.length);

// 字符串的方法
// indexOf() 方法返回字符串中指定文本首次出现的索引（位置）索引从0开始
// lastIndexOf() 方法返回指定文本在字符串中最后一次出现的索引
// 注意：如果未找到文本， indexOf() 和 lastIndexOf() 均返回 -1
// 第二个参数 是从第几个位置开始查询
console.log(str.indexOf("a", 2)); // 0
console.log(str.lastIndexOf("a"));

// search() 方法搜索特定值的字符串，并返回匹配的位置
console.log(str.search("a"));

// indexOf和search的区别：
/*
区别在于：
	search() 方法无法设置第二个开始位置参数。
	indexOf() 方法无法设置更强大的搜索值（正则表达式）。
*/

// slice() 提取字符串的某个部分并在新字符串中返回被提取的部分
// 该方法设置两个参数：起始索引（开始位置），终止索引（结束位置）
// 如果某个参数为负，则从字符串的结尾开始计数
// 如果省略第二个参数，则该方法将裁剪字符串的剩余部分
let str1 = " Apple, Banana ";

console.log(str1.slice(5, 8));
console.log(str1.slice(5));

// substring() 注意：不能接收负数索引
console.log(str1.substring(5, 8));


// substr() 注意：第二个参数是要提取的字符串长度 第一个可以为负数
console.log(str1.substr(5, 4));

// replace() 方法用另一个值替换在字符串中指定的值
// replace() 方法不会改变调用它的字符串。它返回的是新字符串
let str2 = str1.replace("Apple", "orange");
console.log(str1);
console.log(str2);


// toUpperCase() 把字符串转换为大写
// toLowerCase() 把字符串转换为小写
console.log(str1.toUpperCase());

// concat() 连接两个或多个字符串
console.log(str1.concat("  ",str2));

// trim() 方法删除字符串两端的空白符
console.log(str1.trim()); 


// charAt() 方法返回字符串中指定下标（位置）的字符串

console.log(str1.charAt(1));
console.log(str1[1])

// 可以通过 split() 将字符串转换为数组
console.log(str1.split(" "));
console.log(str1.split(""));

// match() 方法根据正则表达式在字符串中搜索匹配项

// 如果字符串包含指定值，includes() 方法返回 true
console.log(str1.includes("Apple"));


// 如果字符串以指定值开头，则 startsWith() 方法返回 true，否则返回 false 可以指定从第几个开始
// 如果字符串以指定值结尾，则 endsWith() 方法返回 true，否则返回 false
console.log(str1.startsWith(" A"));


// (1)使用 \
// (2)使用字符串拼接 + 
// (3)模板字符串
let str3 = "abcsdf \
sdf\
sd"
console.log(str3);

let str4 = `
	abc
	dcd
	sdfds
	sdfsdf

`
console.log(str4);
// 支持变量插值和表达式插值 
let str5 = `我想使用变量，${str1}, ${str2}`;
console.log(str5);

// 支持html模板









